#ifndef KMYFONT_H
#define KMYFONT_H

#include <string>
#include "KmyTypedef.h"
using namespace std;

class KmyFont
{
public:
    KmyFont();
    virtual ~KmyFont();

    /** 字库名称（可省略 */
    string name;
    /** 每个点占用多少位 */
//    int bit_per_point;
    /** ascii字符大小 */
    int ascii_width;
    int ascii_height;
    /** 双字节字符大小 */
    int mbcs_width;
    int mbcs_height;
    /**
      * 是否采用字符映射表
      * 采用字符映射表的话
      * range_count --> table_size
      * start_code --> char_code
      * range --> offset
      */
    bool is_mapping_table;

    /**
      * 字库是否带宽度
      */
    bool is_with_width;

    union{
        struct{
            /** 共有多少个编码范围 */
            int range_count;
            /** 各个段的起始编码 */
            int* start_code;
            /** 各个段的编码数量 */
            int* range;
            /** 字库数据 */
            u8** data;
        }fullfont;
        struct{
            /** 共有多少个编码 */
            int table_size;
            /** 字符表 */
            u16* char_code;
            /** 偏移表 */
            int* offset;
            /** 字库数据,data[0]是ascii，data[1]是双字节字符 */
            u8** data;
        }mapping_tab;
    };

    int getAsciiFontDataSize();
    int getMbcsFontDataSize();

    int getUcs2Width(u16 uc);
    u8* getUcs2Addr(u16 uc);

    u8* getFontBuff(u16 uc);
private:
    u16 cur_char;
    u8* src_font_buff;
};

#endif // KMYFONT_H
